Precession Of The Equinoxes

1. 外力矩

要推导岁差, 第一步需要得到地球所受的外力矩, 而要推导地球所受引力矩的表达式, 需分析太阳或月球对地球赤道隆起的引力作用.

假设地球是均质扁球体 (赤道转动惯量 A, 自转轴转动惯量 C > A), 外引力源 (质量 M, 距离 d) 的方向 r^ 与地球自转轴 z^ 的夹角为黄赤交角 ε23.44 .

地球转动惯量张量在自转系中写成对角矩阵:

I=(A000A000C),ΔI=CA>0

1.1 引力势展开

引力源在地球内部位置 r 处产生的引力势是:

Φ(r)=GM|dr|,d=d r^

在 | r|d 的近似下, 将上式展开至二阶项:

Φ(r)GMd[1+rr^d+3(r^r)2r22d2]

其中常数项和偶极项对净力矩无贡献, 主导项为二阶项:

Φ2(r)=GM2d3[3(r^r)2r2]

1.2 引力展开和微元受力

已知引力场 g=Φ, 质量元 dm 受力 dF=Φ2dm, 表示关于 r 求梯度, 可以得到:

[3(r^r)2r2]=6(r^r)r^2r

因此:

dF=GMd3[3(r^r)r^r]dm

1.3 总力矩积分

积分得到地球所受总力矩 τ=r×dF :

τ=GMd3r×[3(r^r)r^r]dm=3GMd3(r×r^)(r^r)dm

其中:

(r^r)rdm=Ir^=(ArxAryCrz)rz=r^z^=sinε

于是原积分可以改写为:

(r^r)(r×r^)dm=((r^r)rdm)×r^=(ArxAryCrz)×(rxryrz)=(CA)rz(ryrx0)

其中 (ryrx0)=z^×r^, 所以:

(r^r)(r×r^)dm=(CA)sinε(z^×r^)

最终得到:

τ=3GMd3(CA)sinε(z^×r^)τ=3GM2d3(CA)sin2ε

但是, 天体在黄道上是运动的, 这使得我们直接使用 ε 这样一个定值是不准确的. 实际上, 将 ε 视为天体的瞬时赤经, 很容易将上式改写成:

τ=3GMd3(CA)sinδcosδ(sinαcosα0)

其中的 δ, α 是天体瞬时的赤纬和赤经, 取值范围为 δ[ε,ε], α[180, 180). 上式中, sinδcosα 明显在长时间平均中为 0, 而 sinδsinα 始终保持不变的符号(正或负), 根据球面直角三角形的规律, 可以发现:

sinδ=sinεsinucosδ=cosu/cosαtanα=cosεtanu}{sinδcosδsinα=sinεcosεsin2usinδcosδcosα=sinεsinucosu

u 是天体当前的春分点角距(沿着黄道到春分点的角度, 或者叫黄经, 如图), 它正比于时间 t, 可以发现 x 方向的力矩在长时间平均后为 12, 即:

12π02πsin2u du=12

所以, 最终得到的力矩需要加上 12 倍的修正, 最终得到长时间平均后的力矩是:

τ=3GM2d3(CA)cosεsinε

2. 进动角速度

2.1 角动量进动和外力力矩的关系

如下图, 不需要考虑 z 方向力矩, 它只对物体的自转起作用. 所以只考虑垂直于 z 方向的力矩 M.

考虑 x 方向的力矩 M, 根据力矩等于角动量变化率得到: ΔJ=JsinθΔφ=MΔtΩ=ΔφΔt=MJsinθ

可以发现 x 方向的力矩带来的效应是角动量以角速度 Ω 进行进动. 类似的, y 方向的力矩将使得角动量发生章动.

2.2 岁差

结合前面的结果, 有:

Ω=τJsinετ =3GM4d3(CA)sin2εJ   Cω

ω 为地球的自转角速度. 也即:

Ω3GMd3CA2Cωcosε=3GCA2Cω(Md3cosε+Md3cosε)

通过计算(见[[#用 ipython 计算结果的代码]])得到它的结果是 50.45''/a, 对应的周期是两万五千七百年, 与天文观测的结果接近.

参考

用 ipython 计算结果的代码

import math

# 物理常数
G = 6.674e-11  # 万有引力常数 (m^3 kg^-1 s^-2)
omega = 7.272e-5  # 地球自转角速度 (rad/s)
epsilon_deg_sun = 23.4392  # 黄赤交角 (degrees)
epsilon_rad_sun = math.radians(epsilon_deg_sun)  # 黄赤交角 (radians)
cos_epsilon_sun = math.cos(epsilon_rad_sun)
epsilon_deg_moon = epsilon_deg_sun + 5.1453  # 白赤交角
epsilon_rad_moon = math.radians(epsilon_deg_moon)  # 黄赤交角 (radians)
cos_epsilon_moon = math.cos(epsilon_rad_moon)

# 地球参数
C = 8.034e37  # 地球绕极轴转动惯量 (kg·m^2)
f = 1 / 298.257  # 地球扁率
C_minus_A = f * C  # C - A

# 太阳和月球参数
M_sun = 1.989e30  # 太阳质量 (kg)
M_moon = 7.342e22  # 月球质量 (kg)
d_sun = 1.496e11  # 日地平均距离 (m)
d_moon = 3.844e8  # 地月平均距离 (m)

# 计算太阳和月球的引力项
sun_term = M_sun / (d_sun ** 3) * cos_epsilon_sun
moon_term = M_moon / (d_moon ** 3)* cos_epsilon_moon
sum_term = sun_term + moon_term

# 计算转动惯量相关系数
coefficient = (3 * G * C_minus_A) / (2 * C * omega)

# 计算岁差角速度 (rad/s)
omega_precession = coefficient * sum_term

# 单位转换
seconds_per_year = 3.154e7  # 一年的秒数
arcsec_per_rad = 206265  # 每弧度对应的角秒数
omega_precession_arcsec_per_year = omega_precession * seconds_per_year * arcsec_per_rad

print(f"太阳引力项: {sun_term:.2e} kg/m³")
print(f"月球引力项: {moon_term:.2e} kg/m³")
print(f"引力项总和: {sum_term:.2e} kg/m³")
print(f"转动惯量系数: {coefficient:.2e} m³/(kg·s)")
print(f"岁差角速度: {omega_precession:.2e} rad/s")
print(f"岁差速率: {omega_precession_arcsec_per_year:.2f} 角秒/年")
print(f"岁差: {360 * 60 * 60 / omega_precession_arcsec_per_year:.2f} 年")
   
--------------------------------
   
太阳引力项: 5.45e-04 kg/m³
月球引力项: 1.14e-03 kg/m³
引力项总和: 1.68e-03 kg/m³
转动惯量系数: 4.62e-09 m³/(kg·s)
岁差角速度: 7.75e-12 rad/s
岁差速率: 50.45 角秒/年
岁差: 25689.14 年